Оплата по статическому QR-коду — это один из способов безналичной оплаты, альтернатива платежам совершаемых банковскими картами.
Статический QR-код представляет из себя изображение, которое можно распечатать и разместить на видном месте возле кассовой зоны.
Изображение такого QR-кода всегда остается неизменным.
Данный вид QR-кода реализован в двух вариантах:
с открытой суммой, которую вводит сам покупатель;
с фиксированной суммой, заполняемой продавцом.
Совершить оплату по статическому QR-коду возможно следующими способами:
отсканировать изображение QR-кода камерой смартфона и далее перейти в приложение мобильного банка или отсканировать непосредственно из самого мобильного приложения банка;
в случае если изображение QR-кода содержит NFC-метку, то приложить смартфона с включенным NFC-модулем и совершить оплату.
Если QR-код уже с фиксированной суммой, то произвести оплату по цене, указанной в реквизитах платежа, если сумма открытая, то ввести сумму платежа и оплатить.
Средства мгновенно поступают на счёт продавца.
Терминал или дополнительное устройство в данном случае не требуется.
Метод GetQRCd
Описание параметров запроса:
| Код ключа | Тип данных | required | Назначение |
|---|---|---|---|
| command | String (an-1…50) | y | Тип запроса. Константа «GetQRCd». |
| TermNo | String (an-20) | y | Уникальный идентификатор терминала. |
| qrcType | String (n-2) | y | Тип запрашиваемого QR-кода — «01». |
| amount | Number | o | Сумма платежа в минорных единицах (копейках). Значение не указывается, если сумма по платежу вводится плательщиком (сумма открыта). |
| width | String | o | Ширина картинки QR-кода (только числовое значение). |
| height | String | o | Высота картинки QR-кода (только числовое значение). |
| currency | String (ans-3) | o | Код валюты (для рублей должен передаваться «RUB»). |
| paymentPurpose | String (ans-140) | o | Назначение платежа. |
| redirectUrl | String (ans-1024) | о | Содержит ссылку для автоматического возврата в приложение или на сайт ТСП. Допускаются только символы в кодировке ASCII. Формат должен соответствовать правилам кодировки URL. Если все же требуется использовать в redirectUrl кириллические символы, необходимо перекодировать их в соответствующий ASCII код, используя percent-encoded octets согласно RFC3986. |
| messageID | String (ans-1024) | o | Уникальный идентификатор сообщения, GUID. Только латинские символы! |
| queryData.notificationUrl | String (ans-512) | o | Полный URL для получения уведомления о финальном статусе оплаты QR-кода. Если параметр отсутствует, callback уведомление не отправляется. |
Примерный формат запроса:
1{ 2 "command":"GetQRCd", 3 "TermNo":"90080567", 4 "qrcType":"01", 5 "width":"600", 6 "height":"600", 7 "amount":"10000", 8 "currency":"RUB", 9 "paymentPurpose":"Назначение платежа", 10 "messageID":"message", 11 "queryData": 12 { 13 "notificationUrl":"https://sbp-payments" 14 }, 15"redirectUrl": " https://exampletsp.io/qwertyui " 16}
Описание параметров ответа:
| Код ключа | Тип данных | required | Назначение |
|---|---|---|---|
| ErrorCode | String (an-20) | y | Код ответа*. |
| TermNo | String (an-20) | y | Уникальный идентификатор терминала. |
| image | String (an) Длинна зависит от формата, порядок 7000 символов. | y
| Изображение QR-кода содержит энкодированный BASE64 файл изображения QR-кода 300×300 pix формата .png |
| message | String (ans-1024) | y | Расшифровка кода ответа**. |
| payload | String (1…999) | y | Платежная ссылка***. |
| payrrn | String (n-12) | y | Референсный идентификатор запроса в системе Банка. |
| qrcId | String (an-32) | y | Идентификатор QR-кода. |
| messageID | String (ans-1024) | o | Уникальный идентификатор сообщения, GUID. |
| status | String (an-20) | y | Статус регистрации Платежной ссылки СБП. |
*, ** Таблица возможных кодов ответа приведена в приложении 2.
*** Формат payload может быть двух видов:
- https://qr.nspk.ru/AS10000NJTDV88TN82CRT8CG1AU690OF
Примерный формат ответа:
200 ОК
1{ 2 "ErrorCode": 0, 3 "TermNo": 90080567, 4 "image": "iVBORw0KGgoAAAANSUhEUgAABEoAAARKCAIKFIRoUEQWVNAAAQA/w…...YII", 5 "message": "OK", 6 "messageID": "message", 7 "payload": "https://qr.nspk.ru/AS10000NJTDV88TN82CRT8CG1AU690OF", 8 "payrrn": "000051992395", 9 "qrcId": "AS10000NJTDV88TN82CRT8CG1AU690OF", 10 "status": "CREATED" 11}
Примечание: текстовые данные передаются в формате urlencoded.
400 Bad Request
{ "ErrorCode":"Код ответа", "message":"Расшифровка кода ответа" }
Запрос отправляется из ПШ Банка во внутреннюю систему ТСП на URL адрес, указанный в параметре «queryData.notificationUrl» при направлении запроса «GetQRCd».
Метод «qrc/notification»
Описание параметров запроса:
| Код ключа | Тип данных | required | Назначение |
|---|---|---|---|
| qrcId | String (an-32) | y | Идентификатор QR-кода. |
| trxId | String (an-32) | y | Уникальный идентификатор платежа в НСПК. |
| status | String (an-10) | y | Статус оплаты QR-кода в НСПК. Возможные значения: — ACWP — ACCEPTED операция завершена успешно; — RJCT — REJECTED операция отклонена. |
| amount | Number | y | Сумма платежа в минорных единицах (копейках). |
| timestamp | YYYY-MMDDThh: mm: ss[.SSS] или YYYY-MMDDThh: mm: ss[.SSSZ] | y | Метка времени НСПК по Гринвичу (GMT). |
| payerId | String (ans) | y | Идентификатор плательщика (маскированный номер телефона плательщика). |
| kzo | String (ans 1-128) | y | Контрольное Значение Операции СБП. Формируется ОПКЦ СБП. Присутствует при условии, что Операция СБП C2B по запрашиваемому qrcId завершена успешно (параметр «status» ="ACWP»). |
| payrrn | String (n-12) | y | Референсный идентификатор запроса в системе Банка. |
| TermNo | String (an-20) | y | Уникальный идентификатор терминала. |
| CreditDatePos | String (ans 1-256) | o | Дата операции, установленная Банком Получателя в ходе обработки уведомления НСПК. |
Примерный формат запроса:
1{ 2"command":"qrc/notification", 3"qrcId":"AS10000NJTDV88TN82CRT8CG1AU690OF", 4"trxId":"A31040920067662400000550448AD7B3", 5"status":"ACWP", 6"amount":"10000", 7"timestamp":"2023-04-14T09:20:06.000Z", 8"payerId":"\*\*\*\*\*\*\*\*\*1779", 9"kzo":"580d2f38370f378db5915c047ba7b72014327ce455caa927b2488f224926daac85e82984c889d66e79dad8039ccdefd749d4af59d357bf5422a982b5a8f498ed", 10"payrrn":"000051992395", 11"TermNo":"90080567", 12"CreditDatePos":"20230414" 13}
ВС ТСП отвечает http-кодом «200» — успешное получение нотификации, или ошибкой.
В настоящий момент ответ ВС не обрабатывается шлюзом Агента ТСП.
Обработка ответов ТСП сейчас находится в разработке.
В случае добавления со стороны НСПК дополнительных параметров уведомления, система, принимающая их от шлюза Альфа-Банка, не должна рассматривать такие неожиданные параметры как ошибочный запрос.
Возврат по СБП состоит из 2х последовательных запросов:
GetQRCreversalData — проверка возможности проведения возврата;
QRCreversal — выполнение непосредственно самого возврата.
В случае если ТСП инициирует выполнение повторных операций СБП B2C по одной и той же операции СБП C2B, то допускается не более 5 (пяти) попыток выполнения повторных операций СБП B2C в течение одного операционного дня.
Запрос GetQRCreversalData направляется ТСП в Банк для проверки возможности возврата по ранее оплаченному QR-коду и получения данных плательщика.
Метод GetQRCreversalData
Описание параметров запроса:
| Код ключа | Тип данных | required | Назначение |
|---|---|---|---|
| command | String (an-1…50) | y | Тип запроса. Константа GetQRCreversalData». |
| TermNo | String (an-20) | y | Уникальный идентификатор терминала. |
| qrcId | String (an-32) | y | Идентификатор QR-кода. |
| trxId | String (an-32) | y | Уникальный идентификатор платежа в НСПК. |
| trxDT | String (n-14) | o | Дата и время отменяемого платежа. |
| amount | Number | o | Сумма возврата в минорных единицах (копейках). Если сумма возврата не передана, то значение будет принято значению суммы оплаты за минусом уже совершенных возвратов. |
| currency | String (ans-3) | o | Код валюты (для рублей должен передаваться «RUB»). В случае пустого значения валюта будет взята из данных об оплате. |
| messageID | String (ans-1024) | o | Уникальный идентификатор сообщения, GUID. Только латинские символы! |
Примечание: Терминалы с подключенным сканером и распознаванием QR-кодов могут получить «qrcId», распарсив строку QR-кода с чека оплаты покупки. Формат строки соответствует полю «payload».
Примерный формат запроса:
{ ` `"command":"GetQRCreversalData", ` `"TermNo":"90080567", ` `"qrcId":"AS10000NJTDV88TN82CRT8CG1AU690OF", ` `"trxId":"A31040920067662400000550448AD7B3", ` `"trxDT":"20230414062006", ` `"amount":"10000", ` `"currency":"RUB", ` `"messageID":"message" }
Описание параметров ответа:
| Код ключа | Тип данных | required | Назначение |
|---|---|---|---|
| ErrorCode | String (an-20) | y | Код ответа*. |
| TermNo | String (an-20) | y | Уникальный идентификатор терминала. |
| message | String (ans-1024) | y | Расшифровка кода ответа**. |
| messageID | String (ans-1024) | o | Уникальный идентификатор сообщения, GUID. Значение параметра возвращается в случае, если оно указано в запросе. |
| payerBnkBIC | String (n-9) | y | БИК банка получателя. |
| payerBnkName | String (an-50) | y | Наименование банка получателя. |
| payerId | String (n-13) | y | Идентификатор получателя (маскированный номер телефона получателя). |
| payerPam | String (ans 1…140) | y | PAM получателя. |
| payrrn | String (n-12) | y | Референсный идентификатор запроса в системе Банка. |
| qrcId | String (an-32) | y | Идентификатор QR-кода. |
| trxDT | String (n-14) | y | Дата и время платежа по Гринвичу (GMT). Формат времени — ГГГГММДДччммсс. |
| trxId | String (an-32) | y | Уникальный идентификатор платежа в НСПК. |
*, ** Таблица возможных кодов ответа приведена в приложении 2.
Примерный формат ответа:
200 ОК
1{ 2 "ErrorCode": 0, 3 "TermNo": 90080567, 4 "message": "OK", 5 "messageID": "message", 6 "payerBnkBIC": "044525593", 7 "payerBnkName": "%u0410%u043B%u044C%u0444%u0430%20%u0411%u0430%u043D%u043A", 8 "payerId": "*1779", 9 "payerPam": "%u0424%u0421%u0418", 10 "payrrn": "000051992395", 11 "qrcId": "AS10000NJTDV88TN82CRT8CG1AU690OF", 12 "trxDT": 20230414062006 13 "trxId": "A31040920067662400000550448AD7B3" 14}
Примечание:
Текстовые данные передаются в формате urlencoded;
В случае получения "message»: «Получен отказ на запрос возврата. Статус Recall, ErrDebetMerchant: KSM0284 Invalid special condition KSM0284» необходимо проверить счёт ТСП. Он должен быть положительным и без ограничений.
400 Bad Request
{ "ErrorCode":"Код ответа", "message":"Расшифровка кода ответа" }
Запрос QRCreversal направляется ТСП в Банк для возврата по ранее произведенной оплате QR. Возврат производится только на счет плательщика, после проверки возможности возврата (метод GetQRCreversalData).
Метод QRCreversal.
Описание параметров запроса:
| Код ключа | Тип данных | required | Назначение |
|---|---|---|---|
| command | String (an-1…50) | y | Тип запроса. Константа «QRCreversal». |
| TermNo | String (an-20) | y | Уникальный идентификатор терминала. |
| qrcId | String (an-32) | y | Идентификатор QR-кода. |
| trxId | String (an-32) | y | Уникальный идентификатор платежа в НСПК. |
| trxDT | String (n-14) | o | Дата и время отменяемого платежа. |
| amount | Number | o | Сумма платежа в минорных единицах (копейках). Если сумма возврата не передана, то значение будет принято значению суммы оплаты за минусом уже совершенных возвратов. |
| currency | String (ans-3) | o | Код валюты (для рублей должен передаваться «RUB»). В случае пустого значения валюта будет взята из данных об оплате. |
| messageID | String (ans-1024) | o | Уникальный идентификатор сообщения, GUID из сообщения «GetQRCreversalData». Обязательно если было указано в запросе GetQRCreversalData*. |
| queryData.notificationUrl | String (ans-512) | o | Полный URL для получения уведомления о финальном статусе возврата QR-кода. Уведомление не производится в случае пустого значения. |
* messageID — необходимо передавать точное значение, которые было указано в ответе на запрос GetQRCreversalData. Если значение изменилось, необходимо повторно создать запрос GetQRCreversalData с указанием messageID и затем использовать полученный GUID при запросе на возврат.
Примерный формат запроса:
1{ 2 "command":"QRCreversal", 3 "TermNo":"90080567", 4 "qrcId":"AS10000NJTDV88TN82CRT8CG1AU690OF", 5 "trxId":"A31040920067662400000550448AD7B3", 6 "trxDT":"20230414062006", 7 "amount":"10000", 8 "currency":"RUB", 9 "messageID":"message" 10 "queryData": 11 { 12 "notificationUrl":"http://sbp-refunds" 13 } 14 }
Описание параметров ответа:
| Код ключа | Тип данных | required | Назначение |
|---|---|---|---|
| ErrorCode | String (an-20) | y | Код ответ*. |
| TermNo | String (an-20) | y | Уникальный идентификатор терминала. |
| amount | Number | y | Сумма платежа в минорных единицах (копейках). |
| currency | String (ans-3) | y | Код валюты (для рублей должен передаваться «RUB»). |
| message | String (ans-1024) | y | Расшифровка кода ответа. |
| messageID | String (ans-1024) | y/o | Уникальный идентификатор сообщения, GUID. Только латинские символы! |
| trxDT | String (n-14) | y | Дата и время совершенного возврата по Московскому времени (MSK). Формат времени — ГГГГММДДччммсс. |
| trxId | String (an-32) | y | Уникальный идентификатор операции возврата в НСПК. |
| payrrn | String (n-12) | y | Референсный идентификатор запроса в системе Банка. |
*, ** Таблица возможных кодов ответа приведена в приложении 2.
Примерный формат ответа:
200 OK
1{ 2 "ErrorCode": 0, 3 "TermNo": 90080567, 4 "amount": 10000, 5 "currency": "RUB", 6 "message": "%u0412%u043E%u0437%u0432%u0440%u0430%u0442%20%u043F%u0440%u043E%u0432%u0435%u0434%u0435%u043D", 7 "messageID": "message", 8 "payrrn": "000051992395", 9 "trxDT": 20230414093406, 10 "trxId": "B31071502287201D00001650448AD7B3" 11}
Примечание: текстовые данные передаются в формате urlencoded.
400 Bad Request
{ "ErrorCode":"Код ответа", "message":"Расшифровка кода ответа" }
Метод «GetQRCreversalStatus» необходим ТСП для уточнения статуса операции B2C (метод QRCreversal).
В запросе «GetQRCreversalStatus» обязательно должна быть передана пара параметров:
1. «payrrn» или «originalTrxId»
Один из параметров «payrrn» или «originalTrxId» используется для нахождения исходного платежа C2B.
2. «trxId» или «messageID».
Один из параметров «trxId» или «messageID» используется для нахождения операции возврата B2C, по которому требуется уточнить статус.
Метод «GetQRCreversalStatus»
Описание параметров запроса:
| Код ключа | Тип данных | required | Назначение |
|---|---|---|---|
| command | String (an-1…50) | y | Тип запроса. Константа «GetQRCreversalStatus». |
| TermNo | String (an-20) | y | Уникальный идентификатор терминала. |
| payrrn | String (n-12) | y/o (обязательно, если не передан параметр «originalTrxId») | Значение параметра «payrrn» из запроса «QRCreversal». |
| originalTrxId | String (an-32) | y/o (обязательно, если не передан параметр «payrrn») | Идентификатор исходной операции оплаты СБП C2B. |
| trxId | String (an-32) | y/o (обязательно, если не передан «messageID») | Уникальный идентификатор операции возврата СБП B2C. |
| messageID | String (ans-1024) | y/o (обязательно, если не передан «trxId») | Значение параметра «messageID» из запроса «QRCreversal». |
Примерный формат запроса:
{ "command": "GetQRCreversalStatus", "TermNo": "90080567", "payrrn": "000051992395", "originalTrxId": "A31040920067662400000550448AD7B3", "trxId": "B31071502287201D00001650448AD7B3", "messageID":"message" }
Описание параметров ответа:
| Код ключа | Тип данных | required | Назначение |
|---|---|---|---|
| ErrorCode | String (an-20) | y | Код ошибки*. |
| TermNo | String (an-20) | y | Уникальный идентификатор терминала. |
| Url | String (ans 1-512) | o | Полный URL получения уведомления для ТСП -значение параметра, переданного при запросе возврата QRCreversal (queryData.notificationUrl). |
| amount | Number | y | Сумма Операции СБП в копейках. Целое, положительное число. Валюта операции — рубли РФ. |
| message | String (ans-1024) | y | Описание результата выполнения запроса**. |
| messageID | String (an-32) | o | Значение параметра «messageID» из запроса «QRCreversal». |
| originalQrcId | String (an-32) | y | Идентификатор зарегистрированной Платежной ссылки СБП, по которому была выполнена исходная Операция СБП C2B. |
| originalTrxId | String (an-32) | y | Идентификатор исходной Операции СБП C2B. |
| payerId | String (an-13) | y | Маскированный номер телефона Клиента-Получателя (Плательщика в исходной Операции C2B, кому делается возврат). |
| status | String (an-4) | y | Статус операции возврата СБП (B2C): ACWP — ACCEPTED операция завершена успешно; RJCT — REJECTED операция отклонена; NTST — Статус операции неизвестен. |
| trxDT | String (n-14) | y | Дата и время выполнения Операции СБП B2C по сценарию «Возврат по Операции СБП C2B» (ГГГГММДДччммсс). |
| trxId | String (an-32) | y | Уникальный идентификатор операции возврата в НСПК. |
*, ** Таблица возможных кодов ответа приведена в приложении 2.
Примерный формат ответа:
200 OK
1{ 2 "ErrorCode": 0, 3 "TermNo": 90080567, 4 "amount": 10000, 5 "message": "OK", 6 "messageID":"123Rersal_Num567", 7 "originalQrcId": "AS10000NJTDV88TN82CRT8CG1AU690OF", 8 "originalTrxId": "A31040920067662400000550448AD7B3", 9 "payerId": "*********1779", 10 "URL":"http://sbp-payment/status", 11 "status": "ACWP", 12 "trxDT": 20230414093406, 13 "trxId": "B31071502287201D00001650448AD7B3" 14}
Примечание: текстовые данные передаются в формате urlencoded.
400 Bad Request
{ "ErrorCode":"Код ответа", "message":"Расшифровка кода ответа" }